package com.blog.cmrpersonalblog.utils;

/**
 * HTML处理工具类
 */
public class HtmlUtils {

    /**
     * 移除HTML标签，保留纯文本内容
     * @param htmlContent HTML内容
     * @return 纯文本内容
     */
    public static String stripHtmlTags(String htmlContent) {
        if (htmlContent == null || htmlContent.trim().isEmpty()) {
            return "";
        }
        
        return htmlContent
                // 移除HTML标签但保留内容
                .replaceAll("<script[^>]*>[\\s\\S]*?</script>", "")  // 移除script标签及内容
                .replaceAll("<style[^>]*>[\\s\\S]*?</style>", "")   // 移除style标签及内容
                .replaceAll("<[^>]+>", "")  // 移除所有HTML标签
                // 处理HTML实体
                .replaceAll("&nbsp;", " ")
                .replaceAll("&lt;", "<")
                .replaceAll("&gt;", ">")
                .replaceAll("&amp;", "&")
                .replaceAll("&quot;", "\"")
                .replaceAll("&apos;", "'")
                .replaceAll("&#\\d+;", "")  // 移除数字实体
                .replaceAll("&\\w+;", "")   // 移除其他命名实体
                // 处理空白字符
                .replaceAll("\\s+", " ")  // 多个空白字符替换为单个空格
                .trim();
    }
    
    /**
     * 移除Markdown标记，保留纯文本内容
     * @param markdownContent Markdown内容
     * @return 纯文本内容
     */
    public static String stripMarkdownTags(String markdownContent) {
        if (markdownContent == null || markdownContent.trim().isEmpty()) {
            return "";
        }
        
        return markdownContent
                .replaceAll("#+\\s*", "")  // 标题
                .replaceAll("\\*\\*([^*]+)\\*\\*", "$1")  // 粗体
                .replaceAll("\\*([^*]+)\\*", "$1")  // 斜体
                .replaceAll("!\\[.*?\\]\\(.*?\\)", "")  // 图片
                .replaceAll("\\[.*?\\]\\(.*?\\)", "")  // 链接
                .replaceAll("```[\\s\\S]*?```", "")  // 代码块
                .replaceAll("`([^`]+)`", "$1")  // 行内代码
                .replaceAll("\\n+", " ")  // 换行
                .trim();
    }
    
    /**
     * 根据编辑器类型生成摘要
     * @param content 文章内容
     * @param editorTypes 编辑器类型 1-Markdown编辑器 2-富文本编辑器
     * @param maxLength 最大长度，默认200
     * @return 摘要文本
     */
    public static String generateSummary(String content, Integer editorTypes, Integer maxLength) {
        if (content == null || content.trim().isEmpty()) {
            return "";
        }
        
        if (maxLength == null || maxLength <= 0) {
            maxLength = 200;
        }
        
        String plainText;
        
        if (editorTypes != null && editorTypes == 2) {
            // 富文本编辑器：移除HTML标签
            plainText = stripHtmlTags(content);
        } else {
            // Markdown编辑器：移除Markdown标记
            plainText = stripMarkdownTags(content);
        }
        
        // 截取指定长度
        if (plainText.length() > maxLength) {
            return plainText.substring(0, maxLength) + "...";
        }
        
        return plainText;
    }
    
    /**
     * 根据编辑器类型生成摘要（使用默认长度200）
     * @param content 文章内容
     * @param editorTypes 编辑器类型 1-Markdown编辑器 2-富文本编辑器
     * @return 摘要文本
     */
    public static String generateSummary(String content, Integer editorTypes) {
        return generateSummary(content, editorTypes, 200);
    }
}
